package mysql

import (
	"e_mall_server/models"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

/**
 * @Author: zhaobin
 * @Description TODO
 * @Date: 2022-04-29 20:55
 */

// GetAccessList 获取权限列表接口
func GetAccessList() ([]models.Access, error) {
	var accessList []models.Access
	err := db.Debug().Where("parent_id = ?", 0).Preload("AccessItem", func(db *gorm.DB) *gorm.DB {
		return db.Order("access.sort DESC")
	}).Order("sort DESC").Find(&accessList).Error
	if err != nil {
		return nil, err
	}
	//zap.L().Debug("权限列表数据", zap.Any("value", accessList))
	return accessList, nil
}

// GetShowAccessList 获取显示的权限列表接口
func GetShowAccessList() ([]models.Access, error) {
	var accessList []models.Access
	err := db.Debug().Where("parent_id = ? and status = ?", 0, 1).Preload("AccessItem", func(db *gorm.DB) *gorm.DB {
		return db.Where("status = 1").Order("access.sort DESC")
	}).Order("sort DESC").Find(&accessList).Error
	if err != nil {
		return nil, err
	}
	//zap.L().Debug("权限列表数据", zap.Any("value", accessList))
	return accessList, nil
}

// AddAccess 添加权限信息
func AddAccess(access *models.Access) error {
	zap.L().Debug("mysql.AddAccess()", zap.Any("权限信息", access))
	// 进行数据库添加操作
	return db.Create(access).Error
}

// UpdateAccess 修改权限信息
func UpdateAccess(access *models.Access) int64 {
	// 进行数据库修改操作
	return db.Model(&access).Updates(&access).RowsAffected
}

// DeleteAccessById 通过权限id删除权限数据
func DeleteAccessById(id int64) int64 {
	return db.Delete(&models.Access{Id: id}).RowsAffected
}

// GetAccessById 通过id查看权限信息
func GetAccessById(id int64) models.Access {
	access := models.Access{Id: id}
	db.Find(&access)
	return access
}

// GetAccessListByParentId 查看父模块为accessPId的子模块
func GetAccessListByParentId(parentId int64) []models.Access {
	var accessList []models.Access
	db.Where("parent_id = ?", parentId).Find(&accessList)
	return accessList
}

// GetAccessDetailById 通过权限id获取权限详细信息
func GetAccessDetailById(id int64) (access models.Access, err error) {
	access.Id = id
	err = db.Preload("AccessItem").Where("id = ?", id).Find(&access).Error
	return
}
